package com.example.demo.mapper;

import com.example.demo.entity.TaskApprovalStatus;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

@Mapper
public interface TaskApprovalStatusMapper {

    /**
     * 插入审批状态
     */
    int insert(TaskApprovalStatus taskApprovalStatus);

    /**
     * 批量插入审批状态
     */
    int batchInsert(List<TaskApprovalStatus> taskApprovalStatuses);

    /**
     * 根据ID查询审批状态
     */
    TaskApprovalStatus selectById(@Param("id") Long id);

    /**
     * 分页查询审批状态列表
     */
    List<TaskApprovalStatus> selectPage(@Param("offset") int offset,
            @Param("size") int size,
            @Param("taskId") Long taskId,
            @Param("flowId") Long flowId);

    /**
     * 统计审批状态总数
     */
    long count(@Param("taskId") Long taskId,
            @Param("flowId") Long flowId);

    /**
     * 更新审批状态
     */
    int updateById(TaskApprovalStatus taskApprovalStatus);

    /**
     * 删除审批状态
     */
    int deleteById(@Param("id") Long id);

    /**
     * 根据任务ID查询审批状态列表
     */
    List<TaskApprovalStatus> selectByTaskId(@Param("taskId") Long taskId);

    /**
     * 根据流程ID查询审批状态列表
     */
    List<TaskApprovalStatus> selectByFlowId(@Param("flowId") Long flowId);

    /**
     * 根据任务流程ID查询审批状态列表
     */
    List<TaskApprovalStatus> selectByTaskFlowId(@Param("taskFlowId") Long taskFlowId);

    /**
     * 根据节点ID查询审批状态列表
     */
    List<TaskApprovalStatus> selectByNodeId(@Param("nodeId") Long nodeId);

    /**
     * 根据数据源ID查询审批状态列表
     */
    List<TaskApprovalStatus> selectByDataSourceId(@Param("dataSourceId") Long dataSourceId);

    /**
     * 根据审批人ID和状态为处理中(1)查询审批状态列表
     */
    List<TaskApprovalStatus> selectByApproverIdAndStatusProcessing(@Param("approverId") Long approverId);

    /**
     * 根据审批人ID和状态为已审批(2)查询审批状态列表
     */
    List<TaskApprovalStatus> selectByApproverIdAndStatusApproved(@Param("approverId") Long approverId);

    /**
     * 根据任务ID和状态查询审批状态列表
     */
    List<TaskApprovalStatus> selectByTaskIdAndStatus(@Param("taskId") Long taskId, @Param("status") Integer status);
}